// PROGRAMA : IDCPE090
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// CONSULTOR : JORGE PASSOS
// PROGRAMADOR : EDNA PINTO DATA: 09/01/1998
// OBJETIVO : EMITE BOLETIM DE CADASTRO IDENT. CIVIL
// : ALTERACAO DA TELA E DATAS(N6) PARA (N8)
// EM 21/10/1999
// : PESQUISA CADASTRO CRIMINAL E MENSAGEM 18/02/2000
// : INCLUSAO DO CAMPO DIAIDE-OBSERV 15/11/2001
// : ALTERACAO PARA PLACA OSA 26/06/2002
// : ALTERACAO TABELA DE TERMINAIS (SOLON) 16/07/2002

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.ParseException;
import java.util.Calendar;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpe090Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpe091A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Relatoriolist;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislm001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Prodrel;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpe090 OBJETIVO : EMITE BOLETIM DE CADASTRO IDENT. CIVIL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpe090")
public class Idcpe090 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	SicTabelas vwDvetab = new SicTabelas();
	SicCadastro criminalView = new SicCadastro();
	DidCadastro civilView = new DidCadastro();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idcpe090Report report;
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	Sislm001 sislm001 = new Sislm001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Idcpe091 idcpe091;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private String jPoldir;
	private String jInddir;
	private String jMeddir;
	private String jAnudir;
	private String jMindir;
	private String jPolesq;
	private String jIndesq;
	private String jMedesq;
	private String jAnuesq;
	private String jMinesq;
	private int jDtNasc;
	private int jDataNasc;
	private int jDtExp;
	private int jDataExpd;
	private String jFormula;
	private String wdespro;
	private String ctl;
	private String chassi;
	private String nommae;
	private String nompai;
	private long[] datnas = new long[3];;
	private long[] ndemid = new long[3];;
	private String[] comun = new String[3];;
	private String codmun;
	private String vvv;
	private String ppp;
	private String[] nomide = new String[3];
	private String filia1;
	private String filia2;
	private String chave;
	private int jOpc;
	private int jOpc1;
	private String dataA;
	private String jNpost; // PROGRAMA: GETCHR
	// FUNCAO: CAPTURA O NOME LOGICO DO TERMINAL

	private int rTid;
	private int len;
	private int retcode;
	private String getarea;
	private String canal; // 1 TABTERM (A08/58) INIT
	// <'TVCPG001','TVCPG002','TVCPG003','TVCPG004',
	// 'TVCPG005','TVCMV111','TVCMV112','TVCMV131',
	// 'TVCMV051','TVCMV052','TVCMV061','TVCMV062',
	// 'TVCMV071','TVCMV072','TVCMV081','TVCMV082',
	// 'TVCMV091','TVCMV092','TVCMV101','TVCMV102',
	// 'TVCMV111','TVCMV112','TVCMV121','TVCMV122',
	// 'TVCMV131','TVCMV132','TVCMV141','TVCMV142',
	// 'TVCMV151','TVCMV152','TVCMV161','TVCMV162',
	// 'TVCCL001','TVCCL002','TVCCL003','TVCJP004',
	// 'TVCJP001','TVCJP002','TVCJP003','TVCJP005',
	// 'TVCMV132','TSTI0003','TVCMV152','TVCIPZ01',
	// 'TVCIPZ02','TVCIPZ03','TVCIPZ04','TVCIPZ05',
	// 'TVCMV011','TVCMV012','TVCMV021','TVCMV022',
	// 'TVCMV031','TVCMV032','TVCMV041','TVCMV042',
	// 'TGRPH009','TGRPH010'>

	private String wt;
	private String s1;
	private String msgRetorno = "";
	Relatoriolist relatorio;
	Idcpe090 idcpe090Anterior;
	private String faseproc = "0";
	long jRegger;
	int jOp;
	public String mensagem;

	private Relatoriolist preMapas() {
		primeiraVez = true;
		relatorio = new Relatoriolist(primeiraVez, sessao);
		relatorio.setNavegar("../idcpe090/executar");
		relatorio.setTitulo(" EMITE BOLETIM DE CADASTRO IDENT. CIVIL");
		relatorio.setSessao(sessao);
		result.include("relatorio", relatorio);
		sessao.setAtributo("IDCPE090", this);
		if (!relatorio.getFuncao().equals("3")) {
			relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		} else {
			relatorio.receberTela(false, result);
		}
		faseproc = "0";
		return relatorio;
	}

	public Idcpe090(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Relatoriolist relatorio, long jRegger, int jOpc) throws Exception {
		try {
			main(relatorio, jRegger, jOpc);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}

	}

	public void main(Relatoriolist prelatorio, long pjRegger, int pjOpc) throws Exception {
		if (prelatorio != null && prelatorio.getFuncao().equals("3")) {
			prelatorio.setSessao(sessao);
			prelatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		relatorio = new Relatoriolist(primeiraVez, sessao);

		jRegger = pjRegger;
		jOpc = pjOpc;

		if (jOpc == 0 || jOpc == 0) {
			Idcpe092 idcpe092 = new Idcpe092(result, sessao);
			idcpe092.executar(null);
			return;
		}

		InputStreamDownload rel = null;
		report = new Idcpe090Report();
		idcpe091 = new Idcpe091(result, sessao);
		jOpc1 = 0;
		estla001.cpo = 7;
		estla001.esttip = 99;
		for (int i1 = 1; i1 <= 2; i1++) {
			nomide[i1] = "";
		}
		nommae = "";
		nompai = "";
		filia1 = "";
		filia2 = "";
		for (int i1 = 1; i1 <= 2; i1++) {
			comun[i1] = "";
			datnas[i1] = 0;
		}
		ctl = "";
		// qde = 0;
		// CMDMoveAttr
		if (!sessao.getSisgsisp().getOperacao().equals("EBA") && !sessao.getSisgsisp().getOperacao().equals("AIC")) {
			funcoes.sissm001(result, sessao);
		}

		// if (!UtilBean.funcao.equals(UtilBean.ctt_processa))
		// {
		// return;
		// }

		// PERFORM TABSEMI

		chave = "";
		if (jRegger != 0) {
			while (vwDvecon.pesquisaNumeroDocumentoTipoDocumentoIn(ndemid[1], 87, 88)) {
				if (vwDvecon.getTipoDocumento() == 87) {
					mensagem = "DOCUMENTO CANCELADO EMISSAO DO BOLETIM NAO PERMITIDA";
					return;
				}
			}
			vwDvecon.fecha();
			chassi = "";
			rel = acha(jRegger);
			if (rel != null) {
				long rel1 = Calendar.getInstance().getTimeInMillis();
				relatorio.getLista().add(new Prodrel(rel1, "Relatorio1"));
				sessao.setAtributo("" + rel1, rel);
			}
			if (!msgRetorno.equals("")) {
				UtilBean.salvaAcao("br.com.vti.sisp.controller.programa.Idcpa001"); // STACK
			}
		}
		// CALLNAT 'ESTNA001' CPO ESTTIP QDE VAR MATRIC

		if (jOpc == 1) {
			Idcpe091A idcpe091A = new Idcpe091A(true, sessao);
			idcpe091A.setJregger(jRegger);
			idcpe091.executar(idcpe091A, null);
			InputStreamDownload rel2 = idcpe091.rel;
			if (rel2 != null) {
				long relTime2 = Calendar.getInstance().getTimeInMillis();
				relatorio.getLista().add(new Prodrel(relTime2, "Relatorio2"));
				sessao.setAtributo("" + relTime2, rel2);
			}
		} else {
			if (!sessao.getSisgsisp().getOperacao().equals("AIC")) {
				UtilBean.salvaAcao("br.com.vti.sisp.controller.programa.Idcpm001"); // STACK
			} else {
				UtilBean.salvaAcao("br.com.vti.sisp.controller.programa.Idcpa001"); // STACK
			}

		}
		primeiraVez = true;

		relatorio.setNavegar("../idcpe090/executar");
		relatorio.setTitulo(" EMITE BOLETIM DE CADASTRO IDENT. CIVIL");
		relatorio.setSessao(sessao);
		result.include("relatoriolist", relatorio);
		sessao.setAtributo("IDCPE090", this);
		if (!relatorio.getFuncao().equals("3")) {
			relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
		faseproc = "0";
		return;
	}

	private InputStreamDownload acha(long jRegger) throws Exception {
		vwDidcad.consultaNumeroRg(jRegger);

		if (vwDidcad.totalRegistros() == 0) {
			msgRetorno = UtilBean.concatena("RG:", jRegger, " NAO ENCONTRADO PARA EMITIR BOLETIM ");
			return null;
		}
		nomide[1] = vwDidcad.getNomeIdent();
		nompai = vwDidcad.getNomePai();
		nommae = vwDidcad.getNomeMae();
		if (nommae.trim().equals("")) {

			nommae = "************";
		}

		if (nompai.trim().equals("")) {

			nompai = "************";
		}

		datnas[1] = vwDidcad.getDataNasc();
		datnas[1] = funcoes.sissd002(datnas[1]);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 1);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getNomeMunicipioIdent());
		vwDvetab.resp = funcoes.sisst001(1, vwDidcad.getNomeMunicipioIdent(), vwDvetab.resp);
		codmun = vwTabele.resp;
		comun[1] = UtilBean.concatena(codmun, "-", vwDidcad.getUfMunicipioNasc());
		chassi = UtilBean.formataMascara(jRegger, "N", 12, "9999999999999");
		// //DEFINE PRINTER (1) OUTPUT 'PSTI0003'

		// //DEFINE PRINTER(1)
		// OUTPUT 'XX '

		// RELATORIO
		report.setPageSize(44);
		report.setLineSize(80);
		// RELATORIO
		//
		sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");

		jPoldir = vwDidcad.getPolegarDireito();
		jInddir = vwDidcad.getIndicadorDireito();
		jMeddir = vwDidcad.getMedioDireito();
		jAnudir = vwDidcad.getAnularDireito();
		jMindir = vwDidcad.getMinimoDireito();
		jPolesq = vwDidcad.getPolegarEsquerdo();
		jIndesq = vwDidcad.getIndicadorEsquerdo();
		jMedesq = vwDidcad.getMedioEsquerdo();
		jAnuesq = vwDidcad.getAnularEsquerdo();
		jMinesq = vwDidcad.getMinimoEsquerdo();
		// Par�grafo: fd1()
		vwTabele.consultaCodigoTabelaCodigoElemChaveAlfaAcesso(01, (long) vwDidcad.getNomeMunicipioIdent(), vwDidcad.getUfMunicipioNasc());

		report.setJmunnasc(vwDvetab.getDescricaoElem());
		vwTabele.fecha();
		// Par�grafo: fd2()
		vwTabele.consultaCodigoTabelaCodigoElemChaveAlfaAcesso(01, (long) vwDidcad.getCodigoMunicipio(), vwDidcad.getUfMunicipio());
		// 715

		report.setJmunende(vwDvetab.getDescricaoElem());
		vwTabele.fecha();
		// Par�grafo: fd3()
		vwTabele.consultaCodigoTabelaCodigoElem(01, (long) vwDidcad.getCodigoMunicipioExp());

		report.setJmunexp(vwDvetab.getDescricaoElem());
		vwTabele.fecha();

		jDataNasc = vwDidcad.getDataNasc();
		jDtNasc = UtilBean.inverteData(jDataNasc);
		jDataExpd = vwDidcad.getDataExp();
		jDtExp = UtilBean.inverteData(jDataExpd);
		// Par�grafo: fd4()
		vwTabele.consultaCodigoTabelaCodigoElem(209, (long) vwDidcad.getPaisOrigem());
		// 733

		report.setJpais(vwDvetab.getDescricaoElem());
		vwTabele.fecha();
		jFormula = UtilBean.concatena(jPoldir, jInddir, jMeddir, jAnudir, jMindir, jPolesq, jIndesq, jMedesq, jAnuesq, jMinesq);
		report.setJnumcpf(civilView.getNumeroCpf());
		dataA = String.valueOf(UtilBean.inverteData(UtilBean.obtemDataCorrente()));
		report.setDataN(dataA);
		jNpost = String.valueOf(vwDidcad.getNumeroPosto());
		// IF *INIT-USER EQ MASK (XXXXXX) 'IDCSHO '
		// NPOST := '200'
		// END-IF
		// PESQUISA TABELA DE PROFISSAO - TAB: 201

		if (vwDidcad.getDespro().trim().equals("")) {
			if (vwDidcad.getCodigoProfissao() != 0) {
				vwDvetab.consultaTabele(201, (long) vwDidcad.getCodigoProfissao());
				// 755
				wdespro = vwDvetab.getDescricaoElem();
				vwDvetab.fecha();
			}

		} else {

			wdespro = vwDidcad.getDespro();
		}
		report.setWdes(UtilBean.subStr(wdespro, 0, 28));

		// ALTERACAO PARA POSICIONAMENTO DO BOLETIM NA IMPRESSORA APOS A PLACA
		// OSA

		wt = "";
		// RELATORIO
		report.setLineSize(250);
		len = 148;
		retcode = funcoes.getchr(getarea, len, rTid);

		s1 = UtilBean.moveSubstring(s1, 0, 3, "N", 889);
		s1 = UtilBean.moveSubstring(s1, 3, 14, "A", UtilBean.subStr(getarea, 56, 8));
		// TAB. DE ENDERECO DE TERMINAL

		// ENDERECO DO TERMINAL

		formataRelatorio(jRegger);

		while (vwDvetab.pesquisaTabcha(889, UtilBean.subStr(getarea, 56, 8))) {
			// 771

			report.gravaRelatorio(1);
			wt = "S";
		}
		vwDvetab.fecha();
		if (!wt.equals("S")) {
			report.gravaRelatorio(2);
		}

		// CLOSE PRINTER(1)
		criminal();
		if (chave.equals("N")) {
			msgRetorno = civilView.getNumeroRg() + " " + civilView.getNomeIdent() + " " + "OBS: INDIVIDUO COM ALGUM TIPO DE RESTRICAO VERIFIQUE";
		}

		vwDidcad.fecha();

		return report.imprimir();
	}

	private void criminal() {
		while (criminalView.pesquisaNomeCompletoNomeMae(nomide[1], nommae)) {
			if (criminalView.getStatusReg() != 1) {
				chave = "N";
			}
		}
		criminalView.fecha();
	}

	private void formataRelatorio(long jRegger) throws ParseException {
		report.setJdtexp(jDtExp);
		report.setJdtnasc(jDtNasc);
		report.setJnpost(jNpost);
		report.setJregger(jRegger);
		report.setDiaideBairro(vwDidcad.getNomeBairro());
		report.setDiaideEndere(vwDidcad.getEnderecoIdent());
		report.setDiaideMicrof(vwDidcad.getCodigoMicrofilme());
		report.setDiaideNomant(vwDidcad.getNomeAnterior());
		report.setDiaideNomide(vwDidcad.getNomeIdent());
		report.setDiaideNommae(vwDidcad.getNomeMae());
		report.setDiaideNompai(vwDidcad.getNomePai());
		report.setDiaideNumcer(vwDidcad.getNumeroCertidao());
		report.setDiaideNumfol(vwDidcad.getNumeroFolha());
		report.setDiaideNumliv(vwDidcad.getNumeroLivro());
		report.setDiaideNumres(vwDidcad.getNumeroResidencia());
		report.setDiaideObserv(vwDidcad.getObservacaoAdocao());
		report.setDiaideUfexpe(vwDidcad.getUfMunicipioExp());
		report.setDiaideUfmure(vwDidcad.getUfMunicipio());
		report.setDiaideUfnasc(vwDidcad.getUfMunicipioNasc());
		report.setDiaideUfrant(vwDidcad.getUfRegAnterior());
		report.setDiaideZonaof(vwDidcad.getZonaOficio());
		report.setDinideAltura(vwDidcad.getAlturaIdent());
		report.setDinideAnopor(vwDidcad.getAnoPortariaMinist());
		report.setDinideCodcut(vwDidcad.getCodigoCutis());
		report.setDinideCodpor(vwDidcad.getPaisOrigem());
		report.setDinideCodsex(vwDidcad.getCodigoSexo());
		report.setDinideComuen(vwDidcad.getCodigoMunicipio());
		report.setDinideComuex(vwDidcad.getCodigoMunicipioExp());
		report.setDinideComuna(vwDidcad.getNomeMunicipioIdent());
		report.setDinideCorcab(vwDidcad.getCodigoCorCabelo());
		report.setDinideCorolh(vwDidcad.getCodigoCorOlhos());
		report.setDinideEstciv(vwDidcad.getEstadoCivil());
		report.setDinideMatfua(vwDidcad.getMatriculaFuncionario());
		report.setDinideNacion(vwDidcad.getNacionalidadeIdent());
		report.setDinideNumpor(vwDidcad.getNumeroPortariaMinist());
		report.setDinideNumpro(vwDidcad.getNumeroProtocolo());
		report.setDinideOrdens(vwDidcad.getNumeroOrdem());
		report.setDinidePispas(vwDidcad.getNumeroPisPasep());
		report.setDinideRegant(vwDidcad.getRegistroAnterior());
		report.setDinideTipcab(vwDidcad.getCodigoTipoCabelo());
		report.setDinideTipdoc(vwDidcad.getTipoDocumento());
		report.setWpoldir(jPoldir);
		report.setWinddir(jInddir);
		report.setWmeddir(jMeddir);
		report.setWanudir(jAnudir);
		report.setWmindir(jMindir);
		report.setWpolesq(jPolesq);
		report.setWindesq(jIndesq);
		report.setWmedesq(jMedesq);
		report.setWanuesq(jAnuesq);
		report.setWminesq(jMinesq);
		report.setWpoldir1(UtilBean.subStr(jPoldir, 0, 5));
		report.setWinddir1(UtilBean.subStr(jInddir, 0, 5));
		report.setWmeddir1(UtilBean.subStr(jMeddir, 0, 5));
		report.setWanudir1(UtilBean.subStr(jAnudir, 0, 5));
		report.setWmindir1(UtilBean.subStr(jMindir, 0, 5));
		report.setWpolesq1(UtilBean.subStr(jPolesq, 0, 5));
		report.setWindesq1(UtilBean.subStr(jIndesq, 0, 5));
		report.setWmedesq1(UtilBean.subStr(jMedesq, 0, 5));
		report.setWanuesq1(UtilBean.subStr(jAnuesq, 0, 5));
		report.setWminesq1(UtilBean.subStr(jMinesq, 0, 5));
	}

	private void restaurarEstados(Relatoriolist prelatorio) {
		this.idcpe090Anterior = (Idcpe090) sessao.getAtributo("IDCPE090");
		if (prelatorio != null) {
			relatorio = prelatorio;
		} else {
			relatorio = this.idcpe090Anterior.relatorio;
		}
		relatorio.setSessao(sessao);
		faseproc = idcpe090Anterior.faseproc;
		jRegger = idcpe090Anterior.jRegger;
		jOpc = idcpe090Anterior.jOpc;

	}
}
